perm filename SCAN.OLD[XX,LCS]2 blob
sn#218818 filedate 1976-06-10 generic text, type T, neo UTF8
00100 TITLE SCANR
00200 ENTRY SCANR,LNEND
00250 EXTERNAL SCN,SC,ALF,NALF,EXP3.2,SCX
00300 ML←5 ↔ K←0 ↔ NNUM←14 ↔ ISKP←13 ↔ JJ←12 ↔ XMINUS←11 ↔ DECI←10
00400 M←7 ↔ N←6 ↔ QQ←4 ↔ TRIP←3
00500 DEFINE LL <SCN> ↔ DEFINE LR<SCN+1> ↔ DEFINE LBL <SCX+=15>
00600 DEFINE LSL <SCN+4> ↔ DEFINE LST <SCX+=11> ↔DEFINE LCM<SCX+4>
00700 DEFINE LE <SCN+5> ↔ DEFINE LC <SCN+6> ↔ DEFINE LS <SCN+7>
00800 DEFINE LPL<SCX+=10> ↔DEFINE LMI<SCX+5> ↔ DEFINE LF <SCN+=8>
00900 DEFINE LA <SCN+=9> ↔ DEFINE LI <SCN+=10> ↔ DEFINE LW <SCN+=11>
01000 DEFINE JN <SC+=10> ↔ DEFINE DBST <SC+=11> ↔ DEFINE ISEMI <SC+=14>
01100 DEFINE IXX <SC+=13> ↔ DEFINE MODE <SC+=70> ↔ DEFINE VX <SC+=16>
01150 DEFINE LU <SCN+2> ↔ DEFINE LD <SCN+3> ↔ DEFINE INP <ALF>
01160 DEFINE REXP<SC+6> ↔DEFINE DOT<SCX+6> ↔ DEFINE VX4 <SC+=19>
01175 IQ: BLOCK 12
01200 ; 00100 C SUBRS. SCANR, NALF, EDIT, PRESCN
01300 ; 00300 C ***** MSS SCANNER *************************
01400 ; 00400 SUBROUTINE SCANR
01500 ; 00500 DIMENSION IQ(10),LRUD(4)
01600 ; 00600 COMMON/ALF/INP(72),ML
01700 ;650 COMMON/SCN/LL,LR,LU,LD,LSL,LE,LC,LS,LF,LA,LI,LW
01710 ; COMMON/SCX/RHY(4),JALPHA(30),J4,L,Y,K,RX,RZ,RA,J5
01800 ; 00700 COMMON /SC/J,L,MK
01900 ; 00800 1 ,ISKP,XMINUS,N,REXP,LK,NNUM,JJ,JN,DBST,NFLG,IXX,ISEMI,QQ
02000 ; 00900 1 ,VX(50),IAMP,K,RRN,M,MODE,IBLA
02100 ;1000 EQUIVALENCE (IQ(1),VX(41)),(VX1,VX(1)),(VX2,VX(2)),(LDN,LRUD(4))
02200 ; 01100 DATA LRUD/'L','R','U','D'/
02300 ; 01200 C FOR LEFT, RIGHT, UP, DOWN, EDIT
02350 SCANR: 0
02400 MOVE ML,ALF+=72 ; 5 IS ML UNTIL RETURN
02500 ; 01300 NNUM=-1
02600 SETOM NNUM
02700 ; 01400 ISKP=0
02800 SETZM ISKP
02900 ; 01500 JJ=0
03000 SETZM JJ
03100 ; 01600 XMINUS=1.
03200 MOVSI XMINUS,201400
03300 ; 01700 C LEAVES BLANK WHEN REST.
03400 ; 01800 999 DECI=-1
03500 S999: SETOM DECI ;INTEGER UNTIL S11!
03600 ; 01900 M=0
03700 SETZM M
03800 ; 02000 2799 N=INP(ML)
03900 S2799: MOVE N,INP -1(ML)
04000 ; 02100 899 ML=ML+1
04100 S899: AOS ML
04200 CAMN N,LSL ; 02200 781 IF(N.EQ.'/')N=ISEMI
04300 MOVE N,ISEMI
04400 ; 02300 C FOR MOTIVIC TRANFORMATIONS
04500 ; 02380 IF(N.EQ.'*')GO TO 751
04600 CAME N,LST
04700 CAMN N,ISEMI
04800 JRST S751
04900 ; 02400 IF(N.EQ.ISEMI)GO TO 751
05000 ; 02500 C '*' AND '/' ADDED ABOVE 4/18/73
05100 ; 02600 IF(N.NE.IXX)GO TO 22
05200 CAMN N,IXX
05300 SKIPGE SC+=10 ; JN
05400 JRST S22
05500 ; 02650 IF(JN)GO TO 22
05600 ; 02700 IF(ISKP.EQ.0)GO TO 210
05700 JUMPE ISKP,S210
05800 ; 02800 ML=ML-1
05900 SOS ML
06000 ; 02900 GO TO 202
06100 JRST S202
06200 ; 03000 22 IF(N.EQ.IBLA)GO TO 4702
06300 S22: CAMN N,LBL
06400 JRST S4702
06500 ; 03050 IF(N.NE.',')GO TO 510
06600 CAME N,LCM
06700 JRST S510
06800 ; 03100 4702 IF(ISKP)202,2799,2799
06900 ; 03200 512 ML=ML+1
07000 S4702: JUMPGE ISKP,S2799
07100 JRST S202
07200 S512: MOVE 2,ISEMI
07300 AOS ML
07400 ; 03300 IF(INP(ML).EQ.ISEMI)RETURN
07500 CAMN 02,INP -1(ML)
07600 JRST SEND
07700 JRST S512+1
07800 ; 03400 GO TO 512
07900 ; 03600 510 IF(JN.GE.0)GO TO 173
08000 S510: MOVE 02,JN
08100 JUMPGE 02,S173
08200 ; 03700 C SKIP(JN=+1) IF NOT COMING FROM 'EDIT'
08300 ; 03800 JN=1
08400 MOVEI 02,1
08500 MOVEM 02,JN
08600 ; 03900 DO 702 K=1,4
08700 MOVEI 15,1
08800 ; 04000 702 IF(N.EQ.LRUD(K))GO TO 703
08900 S702: CAMN N,SCN -1(15)
09000 JRST S703
09100 CAIGE 15,4
09200 AOJA 15,S702
09300 ; 04100 C FINDS L, R, U, D
09400 ; 04200 C YOU CAN TYPE THE FULL WORD
09500 ; 04300 703 JJ=JJ+1
09600 S703: AOS JJ
09650 MOVE K,15
09700 ; 04400 IF(K.NE.4)GO TO 77
09800 CAIE K,4
09900 JRST S77
10000 ; 04450 IF(INP(ML).EQ.'E')K=99
10100 MOVE 2,LE
10200 CAMN 2,INP-1(ML)
10300 MOVEI K,=99 ; 04500 C 'DE'=DELETE
10400 ; 04600 77 IF(N.EQ.'E')K=55
10500 S77: CAMN N,LE
10600 MOVEI K,=55 ; 04700 C 'E'= EDIT
10700 ; 04800 IF(N.EQ.'C')K=2222
10800 CAMN N,LC
10900 MOVEI K,=2222 ; COPY
11000 ; 04900 IF(N.EQ.IXX)K=222
11100 CAMN N,IXX ; EXIT
11200 MOVEI K,=222
11300 ; 05000 C 'C'=COPY, 'X'=EXIT FROM EDIT MODE
11400 ; 05100 VX(JJ)=K
11500 TLC K,232000
11600 FADR K,K
11700 MOVEM K,VX-1(JJ)
11800 ; 05200 704 IF(INP(ML).EQ.IBLA)GO TO 2799
11900 S704: SKIPL INP-1(ML) ;IF(INP(ML).GT.0)GO TO 2799
12000 JRST S2799 ; IF NEXT CHAR. IS A LETTER(NEG.), SKIP IT.
12400 ; 05300 C PUT COMMA ERASER IN SCX.
12500 AOJA ML,S704 ;05400 ML=ML+1
12700 ; 05500 C SO IT WILL SKIP 'D' AND 'EL' IN 'EDIT' AND 'DEL'
12800 ; GO TO 704
13100 S173: JSA 16,NALF ; 05700 173 K=NALF(N)
13200 JUMP N ; 0 IS K
13400 JUMPG N,S1410 ;05800 IF(N.GT.0)GO TO 1410
13700 CAIN =18 ;05810 IF(K.EQ.18)GO TO 73
13900 JRST S73
14100 ; 05815 C JUMP IF A REST OR OTHER R'S
14300 ; 05820 IF(MODE.EQ.2)GO TO 144
14400 MOVEI 02,2
14500 CAMN 02,MODE
14600 JRST S144
14700 ; 05860 C YOU CAN TYPE 'S', ETC., FOR SIXTEENTH ETC., RHYTHM.
14800 ; 05900 C JUMP IF NOT A LETTER
14900 ; 06000 QQ=0
15000 SETZM QQ ; QQ IS 4
15100 CAIGE =8 ; 06100 IF(K.LT.8)GO TO 15
15200 JRST S15 ;06200 C JUMP IF A POSSIBLE NOTE
15400 ; 06300 IF(K.NE.11)GO TO 16
15500 CAIE =11
15600 JRST S16 ;06400 C JUMP IF NOT A KSIG
15800 ; 06500 18 N=INP(ML)
15900 S18: MOVE N,INP-1(ML)
16000 ; 06600 ML=ML+1
16100 AOS ML
16300 CAMN N,LBL ;IF(N.EQ.IBLA)GO TO 18
16350 JRST S18
16400 CAME N,LS ; 06750 IF(N.EQ.'S')GO TO 18
16800 CAMN N,LPL ; 06775 IF(N.EQ.'+')GO TO 18
16900 JRST S18 ; 06800 IF(N.EQ.ISEMI)GO TO 20
17100 CAMN N,ISEMI
17200 JRST S20 ; 06900 IF(N.EQ.'-')GO TO 177
17400 CAMN N,LMI
17500 JRST S177 ; 06950 IF(N.NE.'F')GO TO 19
17700 CAME N,LF
17800 JRST S19 ; 07000 177 QQ=-10000.
18000 S177: MOVN QQ,[10000.0] ; 07100 GO TO 18
18200 JRST S18 ; 07200 19 A=NALF(N)
18400 S19: JSA 16,NALF
18500 JUMP N
18600 TLC K,232000
18700 FADR K,K ; K IS NOW A
18800 ; 07300 GO TO 18
18900 JRST S18
19000 ; 07400 20 VX(1)=-A*1000.-99.+QQ
19100 S20: FSBR QQ,[99.0]
19200 FMPRI K,212764
19300 FSBR QQ,K
19400 MOVEM QQ,VX ;07500 C -4099=4 SHARPS, -14099=4 FLATS, ETC. KSIG
19600 ; 07600 RETURN
19700 JRST SEND
19800 ; 07700 16 IF(K.NE.9)GO TO 2
19900 S16: CAIE =9
20000 JRST S2
20100 ; 07800 VX(1)=22.
20200 MOVSI 02,205540
20300 MOVEM 02,VX
20400 ; 07900 C FOR EDIT I21 ETC.
20500 ; 08000 GO TO 2799
20600 JRST S2799
20700 ; 08100 2 IF(K.NE.13)GO TO 3
20800 S2: CAIE =13
20900 JRST S3
21000 ; 08200 C JUMP IF NOT A MEASURE LINE
21100 ; 08300 VX(1)=-599.
21200 MOVN 02,[599.0]
21300 MOVEM 02,VX
21400 ; 08310 JN=INP(ML)
21500 MOVE 1,INP -1(ML)
21550 MOVEM 1,JN
21600 ; 08320 IF(JN.NE.LD)GO TO 23
21700 CAME 1,LD
21800 JRST S23
21900 ; 08330 ML=ML+1
22000 AOS ML
22100 ; 08340 C FOUND 'MDN' -- FOR DOUBLE BARS
22200 ; 08350 JN=0
22300 SETZM JN
22400 ; 08360 VX(1)=-609.
22500 MOVN 02,[609.0]
22600 MOVEM 02,VX
22700 ; 08400 23 K=NALF(INP(ML))
22800 S23: JSA 16,NALF
22900 JUMP INP-1(ML)
23000 ; 08500 IF(K.LE.0)GO TO 512
23100 JUMPLE K,S512
23200 ; 08505 IF(K.GT.9)GO TO 512
23300 CAILE =9
23400 JRST S512
23500 ; 08510 IF(JN.EQ.0)K=K+10
23600 SKIPN JN
23700 ADDI =10
23800 ; 08575 VX(1)=-599.-K
23900 TLC K,232000
24000 FADR K,K
24100 FADR K,[599.0]
24200 MOVNM K,VX
24300 ; 08600 C 'M2'= A BAR LINE UP 2 STAVES. ETC.
24400 ; 08700 GO TO 512
24500 JRST S512
24600 ; 08800 3 IF(K.GT.16)GO TO 4
24700 S3: CAILE =16
24800 JRST S4
24900 ; 08900 C JUMP IF NOT FOR 'PROXIMITY' MODE
25000 ; 09000 NSWCH=K-15
25100 SUBI =15
25200 MOVEM K,NSWCH#
25300 ; 09100 GO TO 2799
25400 JRST S2799
25500 ;09200 TO SWITCH ALWAYS USE OCT.# /PBF4/ /OE5/ P=PROXIMITY, O=ORDINARY
25600 ; 09500 4 IF(K.NE.20)GO TO 21
25700 S4: CAIE =20
25800 JRST S21
25900 ; 09600 C TRY AGAIN IF NOT A 'T'
26000 ; 09700 IF(INP(ML).GT.0)GO TO 2799
26100 MOVE 3,INP -1(ML)
26200 JUMPG 3,S2799
26300 ;9800 T12,8/ ETC. MAKES A METER, OR TIME SIG. POS NUMS ARE NOT LETTERS!
26400 ; 09900 VX(1)=-199.
26500 MOVN 02,[199.0]
26600 ; 10000 IF(INP(ML).EQ.'E')VX(1)=-499.
26700 CAMN 3,LE
26800 MOVN 2,[499.0]
26900 MOVEM 02,VX
27000 ; 10100 GO TO 51
27100 JRST S51
27200 ; 10200 21 IF(K.NE.19)GO TO 899
27300 S21: CAIE =19
27400 JRST S2799 ;NOT AN 'S'(STEM), UNKNOWN ITEM, SKIP IT.
27600 ; 10400 VX(1)=-699.
27700 MOVN 03,[699.0] ; 10500 C UP=-699
27900 ; 10600 IF(INP(ML).EQ.LDN)VX(1)=-799.
28000 MOVE 2,INP-1(ML)
28100 CAMN 2,LD
28200 MOVN 3,[799.0] ; DOWN = -799
28300 MOVEM 03,VX
28500 JRST S512 ; 10700 GO TO 512
28600 ; 10800 C NEXT IT'S A NOTE OR CLEF
28700 ; 10900 15 NNUM=K-2
28800 S15: SUBI 2 ; NNUM IS NOW 0 (K)
28900 ; 11000 IF(NNUM.LE.0)NNUM=NNUM+7
29000 SKIPG
29100 ADDI 7
29200 MOVE NNUM,K
29300 ; 11100 N=INP(ML)
29400 MOVE N,INP -1(ML)
29500 ; 11200 IF(N.NE.'A')GO TO 5
29600 CAME N,LA
29700 JRST S5
29800 ; 11300 C JUMP IF NOT BASS CLEF
29900 ; 11400 VX(1)=-299.
30000 MOVN 02,[299.0]
30100 MOVEM 02,VX
30200 ; 11500 51 IF(XMINUS)VX(1)=VX(1)-.5
30300 S51: SKIPL XMINUS
30400 JRST S512
30500 MOVN 2,[0.5]
30600 FADRM 2,VX
30700 ; 11600 C TYPE '-BA' FOR INVISIBLE BASS CLEF, ETC.
30800 ; 11700 GO TO 512
30900 JRST S512
31000 ; 11800 5 IF(N.NE.'L')GO TO 6
31100 S5: CAME N,LL
31200 JRST S6
31300 ; 11900 C JUMP IF NOT ALTO CLEF
31400 ; 12000 VX(1)=-399.
31500 MOVN 02,[399.0]
31600 MOVEM 2,VX
31700 ; 12100 GO TO 51
31800 JRST S51
31900 S6: MOVEI K,1 ;6 K=1
32000 ; 12300 IF(NNUM.GT.3)K=2
32100 CAILE NNUM,3
32200 AOJ K,
32300 ; 12500 C FOUND A NOTE
32400 ; 12700 IF(N.EQ.IXX)GO TO 5410
32500 CAMN N,IXX
32600 JRST S5410
32700 ; 12800 C FOR GX3/ ETC.
32800 ; 12900 K=NALF(N)
32900 JSA 16,NALF
33000 JUMP N
33100 ; 13000 IF(N.GT.0)GO TO 7
33200 JUMPG N,S7
33300 ; 13100 C JUMP IF NOT A LETTER
33400 ; 13200 QQ=100000.
33500 MOVE QQ,[100000.0]
33600 ; 13300 IF(K.EQ.14)GO TO 610
33700 CAIN =14
33800 JRST S610
33900 ; 13400 IF(K.EQ.19)GO TO 8
34000 CAIN =19
34100 JRST S8
34200 ; 13500 C JUMP IF NATURAL
34300 ; 13600 QQ=1000.
34400 MOVSI QQ,212764
34500 ; 13800 GO TO 610
34600 JRST S610
34700 ; 13900 8 QQ=10000.
34800 S8: MOVE QQ,[10000.0]
34900 ; 14100 610 ML=ML+1
35000 S610: AOS ML
35100 ; 14200 K=NALF(INP(ML))
35200 JSA 16,NALF
35300 JUMP INP-1(ML)
35400 ; 14300 7 IF(K.EQ.11)GO TO 5410
35500 S7: CAIN =11
35600 JRST S5410
35700 ; 14350 IF(K.LT.0)GO TO 5410
35800 JUMPL K,S5410
35900 ; 14400 C JUMP IF SEMICOLON OR BLANK
36000 ; 14500 IF(K.NE.24)GO TO 24
36100 CAIN =24
36300 ; 14700 GO TO 5410
36400 JRST S5410
36500 ; 14800 24 JSCA=K-1
36600 S24: SOJ K, ; K IS JSCA FOR NOW
36700 MOVEM K,JSCA# ; SAVE IT
36800 ; 14900 ML=ML+1
36900 AOS ML
37000 ; 15100 GO TO 2410
37100 JRST S2410
37200 ; 15300 5410 IF(NSWCH.EQ.0)GO TO 2410
37300 S5410: MOVE 02,NSWCH
37400 JUMPE 02,S2410
37500 ; 15400 C K=-16 IS A BLANK??
37600 ; 15500 IF(K.EQ.-3)GO TO 277
37700 ;;; CAMN K,[-3]
37900 ;;; JRST S277
38000 ; 15550 IF(K.NE.-5)GO TO 7410
38100 ;;; CAME K,[-5]
38200 ;;; JRST S7410
38300 ; 15600 277 NOLD=NOLD-6*(K+4)
38400 ;;;S277: ADDI K,4
38500 ;;; IMULI K,6
38600 ;;; SUB K,NOLD#
38700 ;;; MOVNM K,NOLD
38800 ; 15700 ML=ML+1
38900 ;;; AOS ML
39000 ; 15800 C -=-3 +=-5 /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
39100 ; 15910 7410 JJ=NOLD-NNUM
39200 S7410: MOVN JJ,NNUM
39300 ADD JJ,NOLD
39400 ; 15920 IF(JJ.LT.4)GO TO 377
39500 CAIGE JJ,4
39600 JRST S377
39700 ; 15950 IF(JSCA.LT.7)JSCA=JSCA+1
39800 MOVE JSCA
39850 CAIGE 7
39900 AOS JSCA
40000 ; 16010 377 IF(JJ.GT.-4)GO TO 2410
40100 S377: CAMLE JJ,[-4]
40200 JRST S2410
40300 ; 16050 IF(JSCA.GT.0)JSCA=JSCA-1
40400 SKIPLE JSCA
40500 SOS JSCA
40600 ;16100 WILL JUMP TO NEAREST NOTE (CHROM)**** MAY 22,71 (DIATONIC-'75)
40700 ; 16200 2410 JJ=1
40800 S2410: MOVEI JJ,1
40900 ; 16300 VX2=0
41000 SETZM VX+1
41100 ; 16410 VX1=(JSCA*7+NNUM+QQ)*DBST
41200 MOVE 2,JSCA
41300 IMULI 2,7
41400 ADD 2,NNUM
41500 TLC 2,232000
41600 FADR 2,2
41650 FADR 2,QQ
41700 FMPR 2,DBST
41800 MOVEM 2,VX
41900 ; 16500 C DOUBLE STOPS ARE NEG. NUMBERS
42000 ; 16600 NOLD=NNUM
42100 MOVEM NNUM,NOLD#
42200 ; 16700 4410 NNUM=-2
42300 S4410: MOVNI NNUM,2
42400 ; 16800 IF(INP(ML).EQ.ISEMI)RETURN
42500 MOVE 02,ISEMI
42600 CAMN 02,INP -1(ML)
42700 JRST SEND
42800 ;16900 ABOVE FINDS SCALE NOTES; IF NSWCH=0 OCT. NUM WILL STICK UNTIL RESET
42900 ; 17000 GO TO 310
43000 JRST S310
43100 ; 17100 210 JJ=JJ+1
43200 S210: AOS JJ
43300 ; 17200 IF(JJ.EQ.1)GO TO 3310
43400 CAIN JJ,1
43500 JRST S3310
43600 ; 17300 XMINUS=1.
43700 MOVSI XMINUS,201400
43800 ; 17400 VX(JJ)=0
43900 SETZM VX -1(JJ)
44000 ;17500 C 'X N1,N2' MAY REPLACE 'REP N1,N2'. N2=0 BECOMES N2=2
44100 ; 17600 GO TO 310
44200 JRST S310
44300 ; 17800 C JUMP IF A LETTER
44400 S1410: MOVE MODE ; 17900 1410 IF(N.NE.'-')GO TO 14
44500 CAME N,LMI
44600 JRST S544
44605 MOVN XMINUS,[1.0] ; 18000 XMINUS=-1.
44610 JUMPE JJ,S2799 ; IF(JJ.EQ.0)GO TO 2799 -- FOR '-BA' ETC.
44620 CAIN 1
44630 JRST S644 ; IF(MODE.EQ.1)GO TO 644 [FOR AUTO OCT. SYS.]
44900 JRST S2799 ; 18100 GO TO 2799
45000 S544: CAIN 1 ; IF(N.NE.'+')GO TO 14
45010 CAME N,LPL
45020 JRST S14
45050 S644: MOVE 7,[7.0] ; DEFAULT IS OCTAVE. (+ OR - 7)
45057 JSA 16,NALF
45058 JUMP ALF-1(ML) ;THE NEXT CHARACTER.
45060 CAIG =9
45065 SKIPG
45070 JRST S744 ;NEXT IS NOT A NUMB.
45072 MOVE 7,0
45075 TLC 7,232000 ;FLOAT NEXT CHAR. AFTER + OR -.
45080 FADR 7,7
45087 AOJ ML,
45090 S744: CAME N,LPL
45100 MOVNS 7
45110 MOVEM 7,VX4 ; SEND IT TO SCMSS -- AT 71
45155 JRST S2799
45160
45165 ; 18102 144 TRIP=0
45200 S144: SETZM TRIP
45300 ; 18105 444 IF(K.EQ.8)VX1=2
45400 S444: CAIE =8
45500 JRST .+3
45600 MOVSI 2,202400
45700 JRST SVX
45800 ; 18107 IF(K.EQ.4)VX1=.5
45900 CAIE 4
46000 JRST .+3
46100 MOVSI 2,200400
46200 JRST SVX
46300 ; 18110 IF(K.EQ.5)VX1=8
46400 CAIE 5
46500 JRST .+3
46600 MOVSI 02,204400
46700 JRST SVX
46800 ; 18115 IF(K.EQ.7)VX1=88
46900 CAIE 7
47000 JRST .+3
47100 MOVSI 02,207540
47200 JRST SVX
47300 ; 18120 IF(K.EQ.19)VX1=16
47400 CAIE =19
47500 JRST .+3
47600 MOVSI 02,205400
47700 JRST SVX
47900 ; 18125 IF(K.NE.20)GO TO 244
48000 CAIE =20
48100 JRST S244
48200 ; 18126 VX1=12
48300 MOVSI 02,204600
48400 MOVEM 02,VX
48500 ; 18127 N=INP(ML)
48600 MOVE N,INP -1(ML)
48700 ; 18129 IF(N.EQ.LBL)GO TO 344
48800 CAME N,LBL
48900 CAMN N,ISEMI
49000 JRST S344
49100 ; 18131 IF(N.EQ.ISEMI)GO TO 344
49200 ; 18133 TRIP=-1
49300 MOVSI TRIP,576400
49400 ; 18150 ML=ML+1
49500 AOS ML
49600 ; 18155 K=NALF(N)
49700 JSA 16,NALF
49800 JUMP N
49900 ; 18160 GO TO 444
50000 JRST S444
50100 ; 18220 244 IF(K.EQ.23)VX1=1
50200 S244: CAIE =23
50300 JRST .+3
50400 MOVSI 02,201400
50500 JRST .+4
50600 ; 18222 IF(K.EQ.17)VX1=4
50700 CAIE =17
50800 JRST .+3
50900 MOVSI 02,203400
51000 SVX: MOVEM 02,VX
51100 ; 18223 C TS=24TH, TQ=6, TH=3.
51200 ;18224 FOR S,E,Q,H,W,D,T RHYTH. 'T'(K=20) =TRIPLET D=DBL WHL NOTE
51300 ; 18225 IF(TRIP)VX1=VX1*1.5
51400 JUMPGE TRIP,S344
51500 MOVSI 2,201600
51600 FMPRM 02,VX
51700 ; 18226 344 JJ=JJ+1
51800 S344: AOS JJ
51900 ; 18228 GO TO 1310
52000 JRST S1310
52030
52100 ; 18230 14 ISKP=-1
52200 S14: SETOM ISKP
52300 ; 18300 IF(N.NE.'.')GO TO 79
52400 CAME N,DOT
52500 JRST S79
52600 ; 18400 DECI=M
52700 MOVE DECI,M
53000 ; 18500 GO TO 75
53100 JRST S75
53200 ; 18600 79 M=M+1
53300 S79: AOS M
53400 ; 18700 IQ(M)=NALF(N)
53500 JSA 16,NALF
53600 JUMP N
53700 MOVEM 00,IQ -1(M)
53800 ; 18800
53900 ; 18900 75 IF(N.EQ.ISEMI)GO TO 751
54000 S75: CAMN N,ISEMI
54100 JRST S751
54200 ; 18950 IF(INP(ML).NE.1)GO TO 2799
54300 MOVEI 02,1
54400 CAME 02,INP -1(ML)
54500 JRST S2799
54600 ; 19000 751 IF(ISKP.EQ.0)RETURN
54700 S751: JUMPE ISKP,SEND
54900 ; 19100 202 IF(DECI.NE.-1)GO TO 302
55000 S202: CAME DECI,[-1]
55200 JRST S302
55300
55400 ; 19200 DECI=0
55500 SETZM DECI
55600
55700 ; 19300 GO TO 402
55800 JRST S402
55900
56000 ; 19400 302 DECI=M-DECI
56100 S302: SUB DECI,M
56200 MOVNS DECI
56500 ; 19500 402 RRN=0
56600 S402: SETZM RRN#
56700 ; 19600 REXP=M-1
56800 MOVNI 02,1
56900 ADD 02,M
57000 TLC 2,232000
57100 FADR 2,2
57200 MOVEM 2,REXP
57300 ; 19700 IF(M.LT.1)M=1
57400 CAIGE M,1
57500 MOVEI M,1
57600 ; 19800 DO 171 K=1,M
57700 MOVEI QQ,1 ;USE QQ FOR INDEX
57800 ; 19900 IF(REXP.GT.1)GO TO 1
57900 S171: MOVSI 02,201400
58000 CAMGE 02,REXP
58100 JRST S1
58200 ; 20000 RRV=10
58300 MOVSI 02,204500 ; RRV IS IN 2
58400 ; 20100 IF(REXP.EQ.0)RRV=1
58500 SKIPN REXP
58600 MOVSI 02,201400
58800 ; 20200 GO TO 11
58900 JRST S11
59000 ; 20300 1 RRV=10.**REXP
59100 S1: MOVSI 02,204500
59200 MOVE 03,REXP
59300 PUSHJ 17,EXP3.2
59500 ; 20400 11 RRN=RRN+IQ(K)*RRV
59600 S11: MOVE 3,IQ-1(QQ)
59700 TLC 3,232000
59800 FADR 3,3
59900 FMPR 2,3
60000 FADRM 2,RRN
60100 ; 20500 171 REXP=REXP-1
60200 MOVSI 02,576400
60300 FADRM 02,REXP
60400 CAMGE QQ,M
60500 AOJA QQ,S171
60510 JUMPE DECI,.+7
60520 TLC DECI,232000
60530 FADR DECI,DECI
60600 ; 20600 A=10.**DECI
60700 MOVSI 02,204500
60800 MOVE 03,DECI
60900 PUSHJ 17,EXP3.2 ; A WILL BE IN AC2
61000 ; 20700 IF(DECI.EQ.0)A=1.
61100 SKIPA
61200 MOVSI 02,201400
61400 ; 20800 JJ=JJ+1
61500 AOS JJ
61600 ; 20900 VX(JJ)=RRN/A*XMINUS
61700 MOVE 1,RRN
61800 FDVR 1,2
61900 FMPR 1,XMINUS
62000 MOVEM 1,VX -1(JJ)
62100 ; 21000 JN=-JN
62200 MOVNS 00,JN
62300 ; 21100 C SETS IT TO -1 FOR L,R,U,D EDIT ROUTINE
62400 ; 21200 IF(MODE.NE.2)XMINUS=1.
62500 MOVEI 02,2
62600 CAME 02,MODE
62700 MOVMS XMINUS
63000 ; 21300 C************: MODE #?
63100 ; 21400 C ONLY ONE - NEEDED FOR RHY.COMPOSITE
63200 ; 21500 1310 IF(INP(ML).NE.1)GO TO 310
63300 S1310: MOVEI 3,1
63400 CAME 3,INP -1(ML)
63500 JRST S310
63600 ; 21600 VX(JJ+1)=VX(JJ)*2. ; FOR DOTTED RHYTHMS
63700 MOVE 02,VX -1(JJ)
63800 FSC 02,1
63900 MOVEM 02,VX (JJ)
64000 ; 21700 JJ=JJ+1
64100 AOS JJ
64200 ; 21800 ML=ML+1
64300 AOS ML
64400 ; 21900 GO TO 1310
64500 JRST S1310 +1
64600 ; 22000 206 ML=ML+2
64700 S206: ADDI ML,2
64800 ; 22100 3310 VX(1)=-99.
64900 S3310: MOVN 02,[99.0]
65000 MOVEM 02,VX
65100 ; 22200 310 ISKP=0
65200 S310: SETZM ISKP
65300 ; 22300 IF(N.NE.ISEMI)GO TO 999
65400 CAME N,ISEMI
65500 JRST S999
65600 ; 22500 RETURN
65700 SEND: MOVEM ML,ALF+=72
65800 MOVEM JJ,SC+=9
65900 JRA 16,(16)
66000 ; 22600 73 JJ=JJ+1
66100 S73: AOS JJ
66200 ; 22650 K=INP(ML)
66300 MOVE K,INP -1(ML)
66400 ; 22700 IF(K.EQ.'E')GO TO 206
66500 CAMN K,LE
66600 JRST S206
66700 ; 22800 C NEXT IS FOR A REST/R/ OR /RI/ FOR INVIS. REST
66800 ; 22810 IF(K.EQ.'D')GO TO 1073
66900 CAMN K,LD
67000 JRST S1073
67100 ; 22820 C /RD/ OR /RU/ = REST 6 DOWN OR 6 UP.
67200 ; 22830 IF(K.EQ.'U')GO TO 1173
67300 CAMN K,LU
67400 JRST S1173
67500 ; 22900 IF(K.EQ.'I')GO TO 573
67600 CAMN K,LI
67700 JRST S573
67800 ; 22910 IF(K.EQ.'W')GO TO 273
67900 CAMN K,LW
68000 JRST S273
68100 ; 22920 C /RW/ MAKES WHOLE REST REGARDLESS OF TIME VALUE GIVEN.
68120 CAMN K,LR ;IF(K.EQ.'R')GO TO 1273
68140 JRST S1273 ; /RR/ MAKES REPEAT BAR SIGN (REST=-4)
68160
68200 ; 22930 C *** ADD NUMBERS LATER *****
68300 ; 22932 K=NALF(K)
68400 JSA 16,NALF
68500 JUMP K
68600 ; 22934 IF(K)GO TO 673
68700 JUMPL K,S673
68800 ; 22936 IF(K.GE.10)GO TO 673
68900 CAIL =10
69000 JRST S673
69100 ; 22940 973 KV=NALF(INP(ML+1))
69200 S973: MOVE 15,K
69300 JSA 16,NALF
69400 JUMP INP(ML)
69500 ; 22941 C FOR 3-DIG. NUMBS. CAN TAKE NUM UP TO 999 FOR RESTS.
69600 ; 22942 IF(KV)GO TO 873
69700 JUMPL S873
69800 ; 22944 IF(KV.GE.10)GO TO 873
69900 CAIL =10
70000 JRST S873
70100 ; 22945 ML=ML+1
70200 AOS ML
70300 ; 22946 K=K*10+KV
70400 IMULI 15,=10
70500 IMUL 02,K
70600 ADD 15,K ; 15 IS K FOR NOW AND K IS IV
70700 ; 22948 GO TO 973
70800 JRST S973+1
70900
71000 ; 22950 873 QQ=K+87
71100 S873: ADDI 15,=87 ; QQ IS 15 NOW
71200 TLC 15,232000
71300 FADR 15,15
71400 ; 22951 GO TO 473
71500 JRST S473
71600 ; 22952 673 QQ=85
71700 S673: MOVSI 15,207524
71800 ; 22956 GO TO 373
71900 JRST S373
72000 ; 22960 573 QQ=86
72100 S573: MOVSI 15,207530
72200 ; 22970 GO TO 473
72300 JRST S473
72400 ; 22980 273 QQ=87
72500 S273: MOVSI 15,207534
72600 ; 22990 473 ML=ML+1
72700 S473: AOS ML
72800 ; 23000 373 VX(JJ)=QQ
72900 S373: MOVEM 15,VX-1(JJ)
73000 ; 23300 GO TO 4410
73100 JRST S4410
73200 ; 23310 1073 QQ=20001
73300 S1073: MOVE 15,[20001.0]
73400 ; 23320 GO TO 473
73500 JRST S473
73600 ; 23330 1173 QQ=20000
73700 S1173: MOVE 15,[20000.0]
73800 ; 23340 GO TO 473
73900 JRST S473
73920 S1273: MOVE 15,[87.1]
73940 JRST S473 ; FOR /RR/
74000 ;23400 END
74100 LNEND: 0 ;SEE FORTR. TEXT IN WORDS.F4
74200 MOVE 0,SCX+=11 ; *
74300 MOVE 1,SCX+=13 ; ;
74400 MOVE 2,SCN+4 ; /
74500 MOVEI 3,=71
74600 L2901: CAME 2,ALF(3)
74700 JRST L2903
74800 MOVEM 1,ALF(3)
74900 JRA 16,(16)
75000 L2903: CAME 1,ALF(3)
75100 JRST L2902
75200 MOVEM 0,ALF(3)
75300 JRA 16,(16)
75400 L2902: SKIPLE 3
75500 SOJA 3,L2901
75600 JRA 16,(16)
75700 END